package com.task.core.service;

import com.task.core.domain.DeviceInfo;
import com.task.core.domain.MissionInfo;
import com.task.core.dto.request.ClientMissionCompleteRequestDTO;
import com.task.core.dto.request.MissionGetRequestDTO;
import com.task.core.dto.response.DataOperationResponseDTO;
import com.task.core.dto.response.MissionOperationResponseDTO;

/**
 * @author 迪迦.
 * @date 2024/12/24 15:21
 */
public interface ClientService {

  /**
   * 客户端根据设备名称和authentication获取设备code,只有这里获取过的设备编号才能进行后续的接口处理
   * @param deviceName      设备名称
   * @param authentication  authentication
   * @return  设备详情
   */
  DeviceInfo getDeviceByName(String deviceName, String authentication);

  /**
   * 根据deviceCode获取任务.
   *
   * @param request 请求信息
   * @return 任务
   */
  MissionOperationResponseDTO getMissionByDeviceCode(MissionGetRequestDTO request);


  /**
   * 客户端根据任务编号获取数据.
   * @param missionSessionCode  获取的限时任务编号
   * @param dataType            需要获取的数据类型
   * @return  数据
   */
  DataOperationResponseDTO getDataByMissionCode(String missionSessionCode, String dataType);

  /**
   * 检查请求的authenticationCode是否有效.
   * @param authentication authentication,在部门表里面
   */
  void checkAuthentication(String authentication);

  /**
   * 客户端返回数据使用状态,一般只会返回失败情况
   * @param dataSendCode  数据发送的限时code
   * @param success       处理状态
   * @return  处理结果
   */
  boolean returnDataCompleteStatus(String dataSendCode, boolean success);

  /**
   * 客户端返回任务使用状态,成功和失败都会返回,都有对应的逻辑处理
   * @param request   请求数据
   * @return  处理结果
   */
  boolean returnMissionCompleteStatus(ClientMissionCompleteRequestDTO request);

  /**
   * 客户端返回设备使用状态
   * @param deviceCode  设备code
   */
  void returnDeviceCompleteStatus(String deviceCode);

  //boolean returnMissionScriptExecuteStatus(String missionSessionCode, boolean success);
}
